// ID生成器工具
// 用于生成带auth前缀的唯一用户ID

// 存储已生成的ID，用于确保唯一性
const generatedIds = new Set()

/**
 * 生成8位随机字符串（数字和字母）
 * @returns {string} 8位随机字符串
 */
function generateRandomString() {
  const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  let result = ''
  for (let i = 0; i < 8; i++) {
    result += chars.charAt(Math.floor(Math.random() * chars.length))
  }
  return result
}

/**
 * 生成带auth前缀的唯一用户ID
 * @returns {string} 格式为 "auth" + 8位随机字符串 的用户ID
 */
export function generateUniqueUserId() {
  let userId
  let attempts = 0
  const maxAttempts = 1000 // 防止无限循环
  
  do {
    userId = 'auth-' + generateRandomString()
    attempts++
    
    // 如果尝试次数过多，抛出错误
    if (attempts > maxAttempts) {
      throw new Error('无法生成唯一用户ID，请重试')
    }
  } while (generatedIds.has(userId))
  
  // 将生成的ID添加到已生成集合中
  generatedIds.add(userId)
  
  return userId
}

/**
 * 生成带knokinds前缀的唯一知识分类ID
 * @returns {string} 格式为 "knokinds-" + 8位随机字符串 的分类ID
 */
export function generateUniqueKnokindsId() {
  let knokindsId
  let attempts = 0
  const maxAttempts = 1000 // 防止无限循环
  
  do {
    knokindsId = 'knokinds-' + generateRandomString()
    attempts++
    
    // 如果尝试次数过多，抛出错误
    if (attempts > maxAttempts) {
      throw new Error('无法生成唯一知识分类ID，请重试')
    }
  } while (generatedIds.has(knokindsId))
  
  // 将生成的ID添加到已生成集合中
  generatedIds.add(knokindsId)
  
  return knokindsId
}

/**
 * 生成带doc前缀的唯一文档ID
 * @returns {string} 格式为 "doc" + 8位随机字符串 的文档ID
 */
export function generateUniqueDocumentId() {
  let documentId
  let attempts = 0
  const maxAttempts = 1000 // 防止无限循环
  
  do {
    documentId = 'doc-' + generateRandomString()
    attempts++
    
    // 如果尝试次数过多，抛出错误
    if (attempts > maxAttempts) {
      throw new Error('无法生成唯一文档ID，请重试')
    }
  } while (generatedIds.has(documentId))
  
  // 将生成的ID添加到已生成集合中
  generatedIds.add(documentId)
  
  return documentId
}

/**
 * 检查用户ID是否已存在
 * @param {string} userId - 要检查的用户ID
 * @returns {boolean} 如果ID已存在返回true，否则返回false
 */
export function isUserIdExists(userId) {
  return generatedIds.has(userId)
}

/**
 * 手动添加已存在的用户ID到集合中
 * 用于从服务器或其他地方获取的已存在ID
 * @param {string} userId - 已存在的用户ID
 */
export function addExistingUserId(userId) {
  if (userId && typeof userId === 'string') {
    generatedIds.add(userId)
  }
}

/**
 * 清除所有已生成的ID记录
 * 主要用于测试或重置场景
 */
export function clearGeneratedIds() {
  generatedIds.clear()
}

/**
 * 获取已生成ID的数量
 * @returns {number} 已生成ID的数量
 */
export function getGeneratedIdsCount() {
  return generatedIds.size
}

/**
 * 获取所有已生成的ID列表
 * @returns {Array<string>} 已生成ID的数组
 */
export function getAllGeneratedIds() {
  return Array.from(generatedIds)
}
